From ebff86d6f69ba3af6c847eb254d230db9ddad347 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 20 Feb 2016 10:43:54 -0500 Subject: [PATCH] box gadget: Make it possible to draw focus There are widgets which use a box gadget and take focus, like GtkCheckButton. --- gtk/gtkboxgadget.c | 25 ++++++++++++++++--------- gtk/gtkboxgadgetprivate.h | 2 ++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/gtk/gtkboxgadget.c b/gtk/gtkboxgadget.c index e16ddbd2ff..c5657a9261 100644 --- a/gtk/gtkboxgadget.c +++ b/gtk/gtkboxgadget.c @@ -36,6 +36,7 @@ typedef struct _GtkBoxGadgetPrivate GtkBoxGadgetPrivate; struct _GtkBoxGadgetPrivate { GtkOrientation orientation; + gboolean draw_focus; GArray *children; }; @@ -448,6 +449,7 @@ gtk_box_gadget_draw (GtkCssGadget *gadget, int height) { GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (GTK_BOX_GADGET (gadget)); + GtkWidget *owner = gtk_css_gadget_get_owner (gadget); guint i; for (i = 0 ; i < priv->children->len; i++) @@ -455,18 +457,14 @@ gtk_box_gadget_draw (GtkCssGadget *gadget, GtkBoxGadgetChild *child = &g_array_index (priv->children, GtkBoxGadgetChild, i); if (GTK_IS_WIDGET (child->object)) - { - gtk_container_propagate_draw (GTK_CONTAINER (gtk_css_gadget_get_owner (gadget)), - GTK_WIDGET (child->object), - cr); - } + gtk_container_propagate_draw (GTK_CONTAINER (owner), GTK_WIDGET (child->object), cr); else - { - gtk_css_gadget_draw (GTK_CSS_GADGET (child->object), - cr); - } + gtk_css_gadget_draw (GTK_CSS_GADGET (child->object), cr); } + if (priv->draw_focus && gtk_widget_has_visible_focus (owner)) + return TRUE; + return FALSE; } @@ -552,6 +550,15 @@ gtk_box_gadget_set_orientation (GtkBoxGadget *gadget, priv->orientation = orientation; } +void +gtk_box_gadget_set_draw_focus (GtkBoxGadget *gadget, + gboolean draw_focus) +{ + GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (gadget); + + priv->draw_focus = draw_focus; +} + static GtkCssNode * get_css_node (GObject *child) { diff --git a/gtk/gtkboxgadgetprivate.h b/gtk/gtkboxgadgetprivate.h index 3662124a85..e59ab9afd9 100644 --- a/gtk/gtkboxgadgetprivate.h +++ b/gtk/gtkboxgadgetprivate.h @@ -56,6 +56,8 @@ GtkCssGadget * gtk_box_gadget_new_for_node (GtkCssNode void gtk_box_gadget_set_orientation (GtkBoxGadget *gadget, GtkOrientation orientation); +void gtk_box_gadget_set_draw_focus (GtkBoxGadget *gadget, + gboolean draw_focus); void gtk_box_gadget_insert_widget (GtkBoxGadget *gadget, int pos, -- 2.30.2